//import java.util.*;
//
//public class Main {
//
//    static class Edge {
//        int to;
//        Edge(int to) {
//            this.to = to;
//        }
//    }
//    static int[] weights;
//    static List<List<Edge>> graph;
//    static boolean[] visited;
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt(); // Number of nodes
//        weights = new int[n];
//        for (int i = 0; i < n; i++) {
//            weights[i] = sc.nextInt(); // Weights of nodes
//        }
//        graph = new ArrayList<>();
//        for (int i = 0; i < n; i++) {
//            graph.add(new ArrayList<>());
//        }
//        for (int i = 0; i < n - 1; i++) {
//            int u = sc.nextInt() - 1; // Convert 1-indexed to 0-indexed
//            int v = sc.nextInt() - 1; // Convert 1-indexed to 0-indexed
//            graph.get(u).add(new Edge(v));
//            graph.get(v).add(new Edge(u)); // If graph is undirected
//        }
//        int q = sc.nextInt(); // Number of queries
//        for (int i = 0; i < q; i++) {
//            int u = sc.nextInt() - 1;
//            int v = sc.nextInt() - 1;
//            visited = new boolean[n];
//            List<Integer> path = findPath(u, v, new ArrayList<>());
//            if (path != null) {
//                System.out.println(average(path));
//            } else {
//                System.out.println("No path found");
//            }
//        }
//    }
//    public static List<Integer> findPath(int current, int target, List<Integer> path) {
//        path.add(current);
//        visited[current] = true;
//        if (current == target) {
//            return path;
//        }
//        for (Edge edge : graph.get(current)) {
//            if (!visited[edge.to]) {
//                List<Integer> newPath = new ArrayList<>(path);
//                List<Integer> result = findPath(edge.to, target, newPath);
//                if (result != null) {
//                    return result;
//                }
//            }
//        }
//        return null;
//    }
//    public static double average(List<Integer> path) {
//        int sum = 0;
//        for (int node : path) {
//            sum += weights[node];
//        }
//        return (double) sum / path.size();
//    }
//}
public class Main {

    private static final long MOD = 1000000007L;

    public static void main(String[] args) {
        long a = 9;
        long b = 2;
        System.out.println(modDivide(a, b, MOD));  // This should print the result of 9/2 mod 10^9+7
    }

    public static long modDivide(long a, long b, long p) {
        long bInverse = modPower(b, p - 2, p);
        return (a * bInverse) % p;
    }
Thread
    public static long modPower(long x, long y, long p) {
        long res = 1L;
        x = x % p;

        while (y > 0) {
            if ((y & 1) == 1)
                res = (res * x) % p;

            y = y >> 1; // y = y/2
            x = (x * x) % p;
        }
        return res;
    }
}
